/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package bpmlab.shift.bean;

import bpmlab.shift.dao.DAOException;
import bpmlab.shift.dao.DAOFactory;
import bpmlab.shift.dao.service.GenericDAO;
import bpmlab.shift.dao.service.UsuarioDAO;
import bpmlab.shift.entity.Papel;
import bpmlab.shift.entity.Usuario;
import java.io.Serializable;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

/**
 *
 * @author Mikael Lima
 */
@ManagedBean
@RequestScoped
public class UsuarioBean implements Serializable {

    private final UsuarioDAO dao = DAOFactory.criarUsuarioDAO();
    private Usuario usuario = new Usuario();
    private List<Usuario> usuarios;
    private List<Papel> papeis;
    private boolean papel;

    public String salvar() {
        try {
            dao.salvar(usuario);
            JsfUtil.mensagemSalvoComSucesso();
            return "/admin/usuario/lista-usuario.xhtml";
        } catch (DAOException ex) {
            JsfUtil.mensagemErroAoSalvar();
            return null;
        }
    }

    public void excluir() {
        try {
            dao.excluir(usuario);
            JsfUtil.mensagemRemovidoComSucesso();
        } catch (Exception e) {
            JsfUtil.mensagemErroAoRemover();
        }
    }

    public boolean isPapel(String papel) {
        Usuario u;
        this.papel = false;
        if (JsfUtil.estarNaSessao(JsfUtil.USUARIO_LOGADO)) {
            u = (Usuario) JsfUtil.obterDaSessao(JsfUtil.USUARIO_LOGADO);
        } else {
            u = dao.obterPorLogin(JsfUtil.obterUsuarioRemoto());
            JsfUtil.colocarNaSessao(JsfUtil.USUARIO_LOGADO, u);
        }
        for (Papel p : u.getPapeis()) {
            if (p.getNome().equals(papel)) {
                this.papel = true;
            }
        }
        return this.papel;
    }

    public Usuario getUsuario() {
        return usuario;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    public List<Usuario> getUsuarios() {
        usuarios = dao.obterTodosComPapeis();
        return usuarios;
    }

    public List<Papel> getPapeis() {
        if (papeis == null) {
            GenericDAO<Papel> daoUsuario = DAOFactory.criarGenericDAO(Papel.class);
            papeis = daoUsuario.obterTodos();
        }
        return papeis;
    }

}
